package TraLaLa.Servidor.DAO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import TraLaLa.Servidor.GestorUsuarios.Usuario;

public class UsuarioDAO implements IDAO {

	private String driver="com.mysql.jdbc.Driver";
	private Connection conexion;
	
	public UsuarioDAO() throws ClassNotFoundException, SQLException
	{
		Class.forName(driver);
		conexion = DriverManager.getConnection("jdbc:mysql://localhost/musica", "root","");
		
	}

	@Override
	public void closeConnection() throws SQLException {
		conexion.close();

	}

	@Override
	public int delete(Object o) throws SQLException {
		if(o instanceof Usuario){
			Statement statement = null;
			statement =  conexion.createStatement();
			String sql="";
			Usuario us=(Usuario) o;
			sql= "DELETE FROM usuario WHERE nick='"+us.getNick()+"';";
			int check=statement.executeUpdate(sql);
			statement.close();
			return check;}
		else
			throw new IllegalArgumentException("El parametro recibido debe ser de la clase Usuario!");
		
	}

	@Override
	public ArrayList<?> getAll() throws SQLException {
		ResultSet resulset=null;
		Statement statement = null;
		statement =  conexion.createStatement();
		String sql="";
		sql= "Select * FROM usuario;";
		//ejecucion de sentencia sql
		resulset=statement.executeQuery(sql);
		//arrayList en el que se cargaran los resultados
		ArrayList<Usuario> lista= new ArrayList<Usuario>();
		
		//se recorren todas las entradas del result set
		while(resulset.next()){
			//a partir del resultset que representa cada linea extraida de la BBDD
			//se crea un objeto usuario que se carga en el array.
			lista.add(convertUsuario(resulset));
		}
		
		statement.close();
		return lista;
	}
	
	public Usuario getUsuario (String nick) throws SQLException{
		Usuario user= null;
		ResultSet resulset=null;
		Statement statement = null;
		statement =  conexion.createStatement();
		String sql="";
		sql= "Select * FROM usuario WHERE nick='"+nick+"';";
		//ejecucion de sentencia sql
		resulset=statement.executeQuery(sql);
		
		if(resulset.next()){
			//a partir del resultset que representa cada linea extraida de la BBDD
			//se crea un objeto usuario que se carga en el array.
			user=convertUsuario(resulset);
		}
		
		return user;
	}

	@Override
	public int save(Object o) throws SQLException {
		
		if(o instanceof Usuario){
			
			Statement statement = null;
			statement =  conexion.createStatement();
			String sql="";
			Usuario us=(Usuario) o;
			sql= "INSERT INTO usuario VALUES ('"+us.getNick()+"','"+us.getPassword()+"','"+
			us.getNombre()+"','"+us.getEmail()+"','"+us.getPassPayPal()+"',"+us.getPuntos()+");";
			
			int check=statement.executeUpdate(sql);
			
			statement.close();
			return check;}
		else
			throw new IllegalArgumentException("El parametro recibido debe ser de la clase Usuario!");
	}

	
	@Override
	public int update(Object o) throws SQLException {
		if(o instanceof Usuario){
			
			Statement statement = null;
			statement =  conexion.createStatement();
			String sql="";
			Usuario us=(Usuario) o;
			sql= "UPDATE usuario SET puntos="+us.getPuntos()+" WHERE nick='"+us.getNick()+"';";
			int check=statement.executeUpdate(sql);
			
			statement.close();
			return check;}
		else
			throw new IllegalArgumentException("El parametro recibido debe ser de la clase Usuario!");

	}
	private Usuario convertUsuario(ResultSet res) throws SQLException{
		Usuario us= new Usuario(res.getString("nick"),res.getString("password"));
		us.setNombre(res.getString("nombre"));
		us.setEmail(res.getString("email"));
		us.setPassPayPal(res.getString("passPayPal"));
		us.setPuntos(res.getInt("puntos"));
		return us;
	}
	
	public static void main(String []args){
		Usuario us=new Usuario("jtv2","jtvp","Julen","email@hotmail.com","pass",0);
		try {
			UsuarioDAO dao= new UsuarioDAO();
			//int res=dao.save(us);
			us=dao.getUsuario("jtv2");
			System.out.println(us);
			dao.closeConnection();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("Clave primaria repetida");
			e.printStackTrace();
		}
	}
}
